From: Marco Trevisan (TreviƱo) Date: Tue, 30 Apr 2024 23:14:43 +0000 (+0200) Subject: js: Use Shell.util_spawn_async functions to launch external processes X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~226^2^2~117 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=26e8fb90fb595510240c57b0862013dbf4739770;p=gnome-shell.git js: Use Shell.util_spawn_async functions to launch external processes As explained in previous commits, it's not safe to use JS code in child function callbacks, so let's use the safer version of it. Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6698 Part-of: --- diff --git a/js/misc/ibusManager.js b/js/misc/ibusManager.js index c3022aaa6..6a5158779 100644 --- a/js/misc/ibusManager.js +++ b/js/misc/ibusManager.js @@ -115,16 +115,9 @@ class IBusManager extends Signals.EventEmitter { const env = launchContext.get_environment(); // Use DO_NOT_REAP_CHILD to avoid adouble-fork internally // since ibus-daemon refuses to start with init as its parent. - const [success_, pid] = GLib.spawn_async( + const pid = Shell.util_spawn_async( null, cmdLine, env, - GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD, - () => { - try { - global.context.restore_rlimit_nofile(); - } catch (err) { - } - } - ); + GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD); GLib.child_watch_add( GLib.PRIORITY_DEFAULT, pid, diff --git a/js/misc/util.js b/js/misc/util.js index 4c172988a..ca59d36be 100644 --- a/js/misc/util.js +++ b/js/misc/util.js @@ -118,19 +118,12 @@ export function spawnApp(argv) { * this will throw an error. */ export function trySpawn(argv) { - let success_, pid; + let pid; try { const launchContext = global.create_app_launch_context(0, -1); - [success_, pid] = GLib.spawn_async( + pid = Shell.util_spawn_async( null, argv, launchContext.get_environment(), - GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD, - () => { - try { - global.context.restore_rlimit_nofile(); - } catch (err) { - } - } - ); + GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD); } catch (err) { /* Rewrite the error in case of ENOENT */ if (err.matches(GLib.SpawnError, GLib.SpawnError.NOENT)) { diff --git a/js/ui/components/networkAgent.js b/js/ui/components/networkAgent.js index f6d5e1a3f..30695901a 100644 --- a/js/ui/components/networkAgent.js +++ b/js/ui/components/networkAgent.js @@ -456,18 +456,12 @@ class VPNRequestHandler extends Signals.EventEmitter { try { const launchContext = global.create_app_launch_context(0, -1); - let [success_, pid, stdin, stdout, stderr] = - GLib.spawn_async_with_pipes( + let [pid, stdin, stdout, stderr] = + Shell.util_spawn_async_with_pipes( null, /* pwd */ argv, launchContext.get_environment(), - GLib.SpawnFlags.DO_NOT_REAP_CHILD, - () => { - try { - global.context.restore_rlimit_nofile(); - } catch (err) { - } - }); + GLib.SpawnFlags.DO_NOT_REAP_CHILD); this._childPid = pid; this._stdin = new GioUnix.OutputStream({fd: stdin, close_fd: true});